package com.share.device.utils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 工单工具类
 * 
 * @author         
 * @date 2025-06-29
 */
public class WorkOrderUtils
{
    /** 工单类型映射 */
    private static final Map<String, String> ORDER_TYPE_MAP = new HashMap<>();
    
    /** 优先级映射 */
    private static final Map<String, String> PRIORITY_MAP = new HashMap<>();
    
    /** 状态映射 */
    private static final Map<String, String> STATUS_MAP = new HashMap<>();
    
    static {
        // 工单类型映射
        ORDER_TYPE_MAP.put("repair", "维修");
        ORDER_TYPE_MAP.put("maintain", "维护");
        ORDER_TYPE_MAP.put("inspect", "检查");
        ORDER_TYPE_MAP.put("refill", "补充");
        
        // 优先级映射
        PRIORITY_MAP.put("low", "低");
        PRIORITY_MAP.put("medium", "中");
        PRIORITY_MAP.put("high", "高");
        PRIORITY_MAP.put("urgent", "紧急");
        
        // 状态映射
        STATUS_MAP.put("pending", "待处理");
        STATUS_MAP.put("processing", "处理中");
        STATUS_MAP.put("completed", "已完成");
        STATUS_MAP.put("closed", "已关闭");
    }
    
    /**
     * 获取工单类型名称
     * 
     * @param orderType 工单类型
     * @return 工单类型名称
     */
    public static String getOrderTypeName(String orderType) {
        return ORDER_TYPE_MAP.getOrDefault(orderType, orderType);
    }
    
    /**
     * 获取优先级名称
     * 
     * @param priority 优先级
     * @return 优先级名称
     */
    public static String getPriorityName(String priority) {
        return PRIORITY_MAP.getOrDefault(priority, priority);
    }
    
    /**
     * 获取状态名称
     * 
     * @param status 状态
     * @return 状态名称
     */
    public static String getStatusName(String status) {
        return STATUS_MAP.getOrDefault(status, status);
    }
    
    /**
     * 判断是否为紧急工单
     * 
     * @param priority 优先级
     * @return 是否紧急
     */
    public static boolean isUrgent(String priority) {
        return "urgent".equals(priority) || "high".equals(priority);
    }
    
    /**
     * 计算处理时长（小时）
     * 
     * @param createTime 创建时间
     * @param completeTime 完成时间
     * @return 处理时长（小时）
     */
    public static Double calculateProcessDuration(Date createTime, Date completeTime) {
        if (createTime == null || completeTime == null) {
            return null;
        }
        
        long durationMillis = completeTime.getTime() - createTime.getTime();
        return durationMillis / (1000.0 * 60 * 60); // 转换为小时
    }
    
    /**
     * 判断是否超时（超过24小时未完成）
     * 
     * @param createTime 创建时间
     * @param status 状态
     * @return 是否超时
     */
    public static boolean isOverdue(Date createTime, String status) {
        if (createTime == null || "completed".equals(status) || "closed".equals(status)) {
            return false;
        }
        
        long currentTime = System.currentTimeMillis();
        long createTimeMillis = createTime.getTime();
        long durationMillis = currentTime - createTimeMillis;
        
        // 24小时 = 24 * 60 * 60 * 1000 毫秒
        return durationMillis > 24 * 60 * 60 * 1000;
    }
    
    /**
     * 获取工单类型列表
     * 
     * @return 工单类型列表
     */
    public static Map<String, String> getOrderTypeList() {
        return new HashMap<>(ORDER_TYPE_MAP);
    }
    
    /**
     * 获取优先级列表
     * 
     * @return 优先级列表
     */
    public static Map<String, String> getPriorityList() {
        return new HashMap<>(PRIORITY_MAP);
    }
    
    /**
     * 获取状态列表
     * 
     * @return 状态列表
     */
    public static Map<String, String> getStatusList() {
        return new HashMap<>(STATUS_MAP);
    }
} 